package demo02_oop

/**
 * 抽象类
 *    在类中有只声明而没有具体定义的方法或属性，这个方法或属性就是抽象的
 *    当前类就是抽象类
 *
 *    不能使用new创建实例化对象
 */
abstract class Person{

  //抽象属性
  val name:String
  //普通属性
  val age:Int = 20

  //抽象方法
  def eat()
  //普通方法
  def drink() = {
    println("人可以喝水")
  }

}

//子类继承抽象类，重写抽象的属性和方法
class Hero extends Person{

  override val name: String = "tom"

  override def eat(): Unit = {
    println("英雄可以吃饭")
  }
}

object Demo02_abstract {
  def main(args: Array[String]): Unit = {
    //使用匿名内部类的形式重写抽象类
    val teacher = new Person {
      override val name: String = ???
      override def eat(): Unit = ???
    }
  }
}
